#include <bits/stdc++.h>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false), cin.tie(NULL);
    
    int T;
    cin >> T;
    
    while (T--) {
        int n, m;
        cin >> n >> m;
        
        // 唯一已知不可行的情况
        if (n == 2 && m == 2) {
            cout << "NO\n";
            continue;
        }
        
        cout << "YES\n";
        
        vector<vector<int>> a(n, vector<int>(m));
        
        if (n == 1 || m == 1) {
            // 对于1维情况，简单递增
            int cnt = 1;
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    a[i][j] = cnt++;
                }
            }
        } else {
            // 对于2维情况，使用更安全的构造
            // 方法：按行填，但让相邻行的数字差较大
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    a[i][j] = i * m + j + 1;
                }
            }
            
            // 对奇数行进行反转，增加差异性
            for (int i = 1; i < n; i += 2) {
                for (int j = 0; j < m / 2; j++) {
                    swap(a[i][j], a[i][m - 1 - j]);
                }
            }
        }
        
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                cout << a[i][j] << " ";
            }
            cout << "\n";
        }
    }
    
    return 0;
}